home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 22 / AMUG_22-1.ISO / Files / Internet / Java / ET Applets 1.1.sit / ET Applets 1.1 / ET_ScrollText / ET_ScrollText.class (.txt) next >
Encoding:
Java Class File  |  1997-08-01  |  10.1 KB  |  454 lines  |  [TEXT/ttxt]

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.MediaTracker;
  10. import java.awt.Rectangle;
  11. import java.awt.image.FilteredImageSource;
  12. import java.awt.image.ImageObserver;
  13. import java.net.MalformedURLException;
  14. import java.net.URL;
  15. import java.util.StringTokenizer;
  16. import java.util.Vector;
  17.  
  18. public final class ET_ScrollText extends Applet implements Runnable {
  19.    static final boolean REG_VERSION = false;
  20.    // $FF: renamed from: RT java.lang.String
  21.    static final String field_0 = "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)";
  22.    static final String APPLETINFO = "ET Scroll Text v1.1. Visit http://www.entanke.se/ for information and more applets.";
  23.    static final String DEF_TEXT = "No TEXT parameter given.";
  24.    static final URL DEF_URL = null;
  25.    static final String DEF_TARGETFRAME = "_self";
  26.    static final String DEF_ALT = null;
  27.    static final int DEF_BREAK = 20;
  28.    static final int DEF_COLOR = 0;
  29.    static final int DEF_OVERCOLOR = 255;
  30.    static final int DEF_CLICKCOLOR = 16711680;
  31.    static final int DEF_BGCOLOR = 16777215;
  32.    static final URL DEF_BGIMAGE = null;
  33.    static final URL DEF_FGIMAGE = null;
  34.    static final String DEF_FONTNAME = "TimesRoman";
  35.    static final int DEF_FONTSIZE = 13;
  36.    static final int DEF_FONTSTYLE = 0;
  37.    static final int DEF_UPDATEDELAY = 50;
  38.    static final int DEF_UPDATEMOVE = 2;
  39.    Image offScreenImage;
  40.    Graphics offScreenGraphics;
  41.    Graphics appletGraphics;
  42.    private Thread kicker;
  43.    Vector parText = new Vector();
  44.    Vector parURL = new Vector();
  45.    Vector parTargetFrame = new Vector();
  46.    Vector parALT = new Vector();
  47.    Vector parBreak = new Vector();
  48.    Vector parFont = new Vector();
  49.    Rectangle parArea;
  50.    URL parBGImage;
  51.    URL parFGImage;
  52.    Vector parColor = new Vector();
  53.    Vector parOverColor = new Vector();
  54.    Vector parClickColor = new Vector();
  55.    Color parBGColor;
  56.    Color parTextBGColor;
  57.    int parUpdateDelay;
  58.    int parUpdateMove;
  59.    Image bgImage;
  60.    Image fgImage;
  61.    Vector textImage = new Vector();
  62.    Vector textImageOver = new Vector();
  63.    Vector textImageClick = new Vector();
  64.    Vector showImage = new Vector();
  65.    Vector showYOffset = new Vector();
  66.    int maxAscent;
  67.    Vector showRect = new Vector();
  68.    Vector showIndex = new Vector();
  69.    private boolean updating = false;
  70.    boolean mouseDown = false;
  71.    int lastAltIndex;
  72.    Event lastEvent;
  73.    boolean isInited = false;
  74.  
  75.    public void init() {
  76.       this.offScreenImage = ((Component)this).createImage(((Component)this).size().width, ((Component)this).size().height);
  77.       this.offScreenGraphics = this.offScreenImage.getGraphics();
  78.       this.appletGraphics = ((Component)this).getGraphics();
  79.       this.parBGColor = new Color(this.getIntegerParameter("BGColor", new Integer(16777215), 16));
  80.       Integer var1 = this.getIntegerParameter("TextBGColor", (Integer)null, 16);
  81.       if (var1 == null) {
  82.          this.parTextBGColor = this.parBGColor;
  83.       } else {
  84.          this.parTextBGColor = new Color(var1);
  85.       }
  86.  
  87.       this.offScreenGraphics.setColor(this.parBGColor);
  88.       this.offScreenGraphics.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  89.       FontMetrics var2 = this.offScreenGraphics.getFontMetrics(this.offScreenGraphics.getFont());
  90.       this.offScreenGraphics.setColor(Color.gray);
  91.       this.offScreenGraphics.drawString("(loading)", (((Component)this).size().width - var2.stringWidth("(loading)")) / 2, ((Component)this).size().height / 2);
  92.       this.parBGImage = this.getURLParameter("BGImage", (URL)null);
  93.       this.parFGImage = this.getURLParameter("FGImage", (URL)null);
  94.       this.parArea = this.getAreaParameter("Area", new Rectangle(0, 0, ((Component)this).size().width, ((Component)this).size().height));
  95.       this.parUpdateDelay = this.getIntegerParameter("UpdateDelay", new Integer(50), 10);
  96.       this.parUpdateMove = this.getIntegerParameter("UpdateMove", new Integer(2), 10);
  97.       boolean var3 = true;
  98.  
  99.       for(int var4 = 1; var3; ++var4) {
  100.          if (var4 == 1) {
  101.             this.parText.addElement(this.getStringParameter("Text1", "No TEXT parameter given."));
  102.             this.parURL.addElement(this.getURLParameter("URL1", (URL)null));
  103.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame1", "_self"));
  104.             this.parALT.addElement(this.getStringParameter("ALT1", (String)null));
  105.             this.parBreak.addElement(this.getIntegerParameter("Break1", new Integer(20), 10));
  106.             this.parColor.addElement(this.getIntegerParameter("Color1", new Integer(0), 16));
  107.             this.parOverColor.addElement(this.getIntegerParameter("OverColor1", new Integer(255), 16));
  108.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor1", new Integer(16711680), 16));
  109.             this.parFont.addElement(this.getFontParameter("FontName1", "FontStyle1", "FontSize1", new Font("TimesRoman", 0, 13)));
  110.          } else if (this.getStringParameter("Text" + var4, (String)null) != null) {
  111.             this.parText.addElement(this.getStringParameter("Text" + var4, (String)this.parText.elementAt(var4 - 2)));
  112.             this.parURL.addElement(this.getURLParameter("URL" + var4, (URL)null));
  113.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame" + var4, (String)this.parTargetFrame.elementAt(var4 - 2)));
  114.             this.parALT.addElement(this.getStringParameter("ALT" + var4, (String)null));
  115.             Vector var10000 = this.parBreak;
  116.             String var5 = "Break" + var4;
  117.             var10000.addElement(this.getIntegerParameter(var5, new Integer(20), 10));
  118.             this.parColor.addElement(this.getIntegerParameter("Color" + var4, (Integer)this.parColor.elementAt(var4 - 2), 16));
  119.             this.parOverColor.addElement(this.getIntegerParameter("OverColor" + var4, (Integer)this.parOverColor.elementAt(var4 - 2), 16));
  120.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor" + var4, (Integer)this.parClickColor.elementAt(var4 - 2), 16));
  121.             this.parFont.addElement(this.getFontParameter("FontName" + var4, "FontStyle" + var4, "FontSize" + var4, (Font)this.parFont.elementAt(var4 - 2)));
  122.          } else {
  123.             var3 = false;
  124.          }
  125.       }
  126.  
  127.    }
  128.  
  129.    private Integer getIntegerParameter(String var1, int var2, int var3) {
  130.       return this.getIntegerParameter(var1, new Integer(var2), var3);
  131.    }
  132.  
  133.    private Integer getIntegerParameter(String var1, Integer var2, int var3) {
  134.       String var4 = ((Applet)this).getParameter(var1);
  135.  
  136.       try {
  137.          Integer var5 = new Integer(Integer.parseInt(var4, var3));
  138.          return var5;
  139.       } catch (NumberFormatException var6) {
  140.          return var2;
  141.       }
  142.    }
  143.  
  144.    private String getStringParameter(String var1, String var2) {
  145.       String var3 = ((Applet)this).getParameter(var1);
  146.       return var3 == null ? var2 : var3;
  147.    }
  148.  
  149.    private URL getURLParameter(String var1, URL var2) {
  150.       String var3 = this.getStringParameter(var1, (String)null);
  151.  
  152.       try {
  153.          URL var4 = new URL(((Applet)this).getDocumentBase(), var3);
  154.          return var4;
  155.       } catch (MalformedURLException var5) {
  156.          return var2;
  157.       }
  158.    }
  159.  
  160.    private Rectangle getAreaParameter(String var1, Rectangle var2) {
  161.       String var3 = this.getStringParameter(var1, (String)null);
  162.       if (var3 == null) {
  163.          return var2;
  164.       } else {
  165.          StringTokenizer var4 = new StringTokenizer(var3);
  166.          return new Rectangle(Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()));
  167.       }
  168.    }
  169.  
  170.    private Font getFontParameter(String var1, String var2, String var3, Font var4) {
  171.       String var5 = this.getStringParameter(var1, var4.getName());
  172.       String var6 = this.getStringParameter(var2, "");
  173.       int var7 = var4.getSize();
  174.       var7 = this.getIntegerParameter(var3, new Integer(var7), 10);
  175.       int var8 = var4.getStyle();
  176.       if (var6.equalsIgnoreCase("Plain")) {
  177.          var8 = 0;
  178.       }
  179.  
  180.       if (var6.equalsIgnoreCase("Bold")) {
  181.          var8 = 1;
  182.       }
  183.  
  184.       if (var6.equalsIgnoreCase("Italic")) {
  185.          var8 = 2;
  186.       }
  187.  
  188.       if (var6.equalsIgnoreCase("BoldItalic")) {
  189.          var8 = 3;
  190.       }
  191.  
  192.       return new Font(var5, var8, var7);
  193.    }
  194.  
  195.    public void makeTextVector(Vector var1, String var2, int var3, Integer var4, FontMetrics var5) {
  196.       Color var6 = new Color(var4);
  197.       Image var7 = ((Component)this).createImage(var5.stringWidth(var2), var5.getHeight() + 1);
  198.       Graphics var8 = var7.getGraphics();
  199.       Color var9 = null;
  200.       if (this.parBGImage != null) {
  201.          int var10 = var6.getRGB() & 16777215;
  202.          int var11 = var10 >> 16 & 255;
  203.          int var12 = var10 >> 8 & 255;
  204.          int var13 = var10 & 255;
  205.          if ((var11 + var12 + var13) / 3 > 128) {
  206.             var9 = Color.black;
  207.          } else {
  208.             var9 = Color.white;
  209.          }
  210.  
  211.          var8.setColor(var9);
  212.       } else {
  213.          var8.setColor(this.parTextBGColor);
  214.       }
  215.  
  216.       var8.fillRect(0, 0, var5.stringWidth(var2), var5.getHeight() + 1);
  217.       var8.setFont((Font)this.parFont.elementAt(var3));
  218.       var8.setColor(var6);
  219.       var8.drawString(var2, 0, var5.getAscent());
  220.       if (this.parBGImage != null) {
  221.          FilteredImageSource var14 = new FilteredImageSource(var7.getSource(), new ET_TransFilter(var9.getRGB()));
  222.          var1.addElement(((Component)this).createImage(var14));
  223.       } else {
  224.          var1.addElement(var7);
  225.       }
  226.    }
  227.  
  228.    public String getAppletInfo() {
  229.       return "ET Scroll Text v1.1. Visit http://www.entanke.se/ for information and more applets.";
  230.    }
  231.  
  232.    public void start() {
  233.       if (this.kicker == null) {
  234.          this.kicker = new Thread(this);
  235.          this.kicker.start();
  236.       }
  237.  
  238.    }
  239.  
  240.    public void stop() {
  241.       if (this.kicker != null && this.kicker.isAlive()) {
  242.          this.kicker.stop();
  243.       }
  244.  
  245.       this.kicker = null;
  246.    }
  247.  
  248.    public void destroy() {
  249.       this.kicker = null;
  250.    }
  251.  
  252.    public final void update(Graphics var1) {
  253.       if (!this.updating) {
  254.          var1.drawImage(this.offScreenImage, 0, 0, this);
  255.       }
  256.  
  257.    }
  258.  
  259.    private final void updateOffScreen() {
  260.       this.updating = true;
  261.       if (this.bgImage != null) {
  262.          this.offScreenGraphics.drawImage(this.bgImage, 0, 0, this);
  263.       }
  264.  
  265.       for(int var1 = this.showImage.size() - 1; var1 >= 0; --var1) {
  266.          this.offScreenGraphics.drawImage((Image)this.showImage.elementAt(var1), ((Rectangle)this.showRect.elementAt(var1)).x, ((Rectangle)this.showRect.elementAt(var1)).y, this);
  267.       }
  268.  
  269.       if (this.fgImage != null) {
  270.          this.offScreenGraphics.drawImage(this.fgImage, 0, 0, this);
  271.       }
  272.  
  273.       this.updating = false;
  274.    }
  275.  
  276.    public final void paint(Graphics var1) {
  277.       if (!this.updating) {
  278.          var1.drawImage(this.offScreenImage, 0, 0, this);
  279.       }
  280.  
  281.    }
  282.  
  283.    private void fixTextColors(Event var1) {
  284.       if (var1 != null) {
  285.          this.lastEvent = var1;
  286.       }
  287.  
  288.       if (this.lastEvent != null) {
  289.          int var2 = -1;
  290.  
  291.          for(int var3 = 0; var3 < this.showRect.size(); ++var3) {
  292.             int var4 = (Integer)this.showIndex.elementAt(var3);
  293.             Object var5 = null;
  294.             if (((Rectangle)this.showRect.elementAt(var3)).inside(this.lastEvent.x, this.lastEvent.y) && this.parArea.inside(this.lastEvent.x, this.lastEvent.y) && this.parURL.elementAt(var4) != null) {
  295.                if (this.mouseDown) {
  296.                   var5 = this.textImageClick.elementAt(var4);
  297.                } else {
  298.                   var5 = this.textImageOver.elementAt(var4);
  299.                }
  300.  
  301.                if (this.lastEvent.id == 502) {
  302.                   ((Applet)this).getAppletContext().showDocument((URL)this.parURL.elementAt(var4), (String)this.parTargetFrame.elementAt(var4));
  303.                }
  304.  
  305.                var2 = var4;
  306.             } else {
  307.                var5 = this.textImage.elementAt(var4);
  308.             }
  309.  
  310.             this.showImage.setElementAt(var5, var3);
  311.          }
  312.  
  313.          if (this.lastAltIndex != var2) {
  314.             if (var2 != -1 && this.parALT.elementAt(var2) != null) {
  315.                ((Applet)this).showStatus((String)this.parALT.elementAt(var2));
  316.             } else {
  317.                ((Applet)this).showStatus("(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  318.             }
  319.          }
  320.  
  321.          this.lastAltIndex = var2;
  322.       }
  323.    }
  324.  
  325.    public boolean handleEvent(Event var1) {
  326.       switch (var1.id) {
  327.          case 501:
  328.             this.mouseDown = true;
  329.             this.fixTextColors(var1);
  330.             return true;
  331.          case 502:
  332.             this.mouseDown = false;
  333.             this.fixTextColors(var1);
  334.             return true;
  335.          case 503:
  336.          case 504:
  337.          case 505:
  338.          case 506:
  339.             this.fixTextColors(var1);
  340.             return true;
  341.          default:
  342.             return super.handleEvent(var1);
  343.       }
  344.    }
  345.  
  346.    public void run() {
  347.       if (!this.isInited) {
  348.          Graphics var1 = this.appletGraphics;
  349.          if (!this.updating) {
  350.             var1.drawImage(this.offScreenImage, 0, 0, this);
  351.          }
  352.  
  353.          for(int var9 = 0; var9 < this.parText.size(); ++var9) {
  354.             FontMetrics var2 = this.appletGraphics.getFontMetrics((Font)this.parFont.elementAt(var9));
  355.             if (var2.getAscent() > this.maxAscent) {
  356.                this.maxAscent = var2.getAscent();
  357.             }
  358.  
  359.             this.showYOffset.addElement(new Integer(-var2.getAscent()));
  360.             this.makeTextVector(this.textImage, (String)this.parText.elementAt(var9), var9, (Integer)this.parColor.elementAt(var9), var2);
  361.             this.makeTextVector(this.textImageOver, (String)this.parText.elementAt(var9), var9, (Integer)this.parOverColor.elementAt(var9), var2);
  362.             this.makeTextVector(this.textImageClick, (String)this.parText.elementAt(var9), var9, (Integer)this.parClickColor.elementAt(var9), var2);
  363.          }
  364.  
  365.          MediaTracker var11 = new MediaTracker(this);
  366.          this.bgImage = ((Component)this).createImage(((Component)this).size().width, ((Component)this).size().height);
  367.          Graphics var3 = this.bgImage.getGraphics();
  368.          var3.setColor(this.parBGColor);
  369.          var3.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  370.          Image var4 = null;
  371.  
  372.          try {
  373.             var4 = ((Applet)this).getImage(this.parBGImage);
  374.             var11.addImage(var4, 1);
  375.          } catch (NullPointerException var8) {
  376.          }
  377.  
  378.          try {
  379.             this.fgImage = ((Applet)this).getImage(this.parFGImage);
  380.             var11.addImage(this.fgImage, 2);
  381.          } catch (NullPointerException var7) {
  382.          }
  383.  
  384.          try {
  385.             var11.waitForAll();
  386.          } catch (InterruptedException var6) {
  387.          }
  388.  
  389.          if (var4 != null) {
  390.             var3.drawImage(var4, 0, 0, this);
  391.          } else {
  392.             var3.setColor(this.parTextBGColor);
  393.             var3.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  394.          }
  395.  
  396.          this.updateOffScreen();
  397.          Graphics var5 = this.appletGraphics;
  398.          if (!this.updating) {
  399.             var5.drawImage(this.offScreenImage, 0, 0, this);
  400.          }
  401.  
  402.          this.offScreenGraphics.clipRect(this.parArea.x, this.parArea.y, this.parArea.width, this.parArea.height);
  403.          Image var15 = (Image)this.textImage.firstElement();
  404.          this.showImage.addElement(var15);
  405.          this.showRect.addElement(new Rectangle(this.parArea.x + this.parArea.width, this.parArea.y + this.maxAscent + (Integer)this.showYOffset.firstElement(), var15.getWidth((ImageObserver)null), var15.getHeight((ImageObserver)null)));
  406.          this.showIndex.addElement(new Integer(0));
  407.          this.isInited = true;
  408.       }
  409.  
  410.       int var10 = 0;
  411.  
  412.       while(true) {
  413.          this.fixTextColors((Event)null);
  414.          this.updateOffScreen();
  415.          Graphics var12 = this.appletGraphics;
  416.          if (!this.updating) {
  417.             var12.drawImage(this.offScreenImage, 0, 0, this);
  418.          }
  419.  
  420.          for(int var13 = 0; var13 < this.showRect.size(); ++var13) {
  421.             Rectangle var10000 = (Rectangle)this.showRect.elementAt(var13);
  422.             var10000.x -= this.parUpdateMove;
  423.          }
  424.  
  425.          if (((Rectangle)this.showRect.firstElement()).x + ((Rectangle)this.showRect.firstElement()).width < this.parArea.x) {
  426.             this.showImage.removeElementAt(0);
  427.             this.showRect.removeElementAt(0);
  428.             this.showIndex.removeElementAt(0);
  429.          }
  430.  
  431.          if (((Rectangle)this.showRect.lastElement()).x + ((Rectangle)this.showRect.lastElement()).width < this.parArea.width + this.parArea.x) {
  432.             ++var10;
  433.             if (var10 == this.textImage.size()) {
  434.                var10 = 0;
  435.             }
  436.  
  437.             Image var14 = (Image)this.textImage.elementAt(var10);
  438.             this.showImage.addElement(var14);
  439.             this.showRect.addElement(new Rectangle(((Rectangle)this.showRect.lastElement()).x + ((Rectangle)this.showRect.lastElement()).width + (Integer)this.parBreak.elementAt((Integer)this.showIndex.lastElement()), this.parArea.y + this.maxAscent + (Integer)this.showYOffset.elementAt(var10), var14.getWidth((ImageObserver)null), var14.getHeight((ImageObserver)null)));
  440.             this.showIndex.addElement(new Integer(var10));
  441.          }
  442.  
  443.          this.delay(this.parUpdateDelay);
  444.       }
  445.    }
  446.  
  447.    private void delay(int var1) {
  448.       try {
  449.          Thread.sleep((long)var1);
  450.       } catch (InterruptedException var2) {
  451.       }
  452.    }
  453. }
  454.